import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  // 数据源
  state: {
    cartData: [],
    // 购物车总价格
    cartTotalPrice: 0,
    todook: [],
    todo: []
  },
  // 相当于组件中的计算属性
  getters: {
    cartData(state) {
      return state.cartData.map(item => {
        item['total'] = item.price * item.num
        return item
      })
    },
    cartTotalPrice(state) {
      /*let total = 0
      state.cartData.forEach(item => {
        total += item.price * item.num
      })
      return total*/
      // prev 初始值=>值取参2的值，当循环第2次时就是return和上一次返回值
      // next 当前循环的对象
      // 用于聚合运算  提高 map reduce
      return state.cartData.reduce((prev, next) => {
        /*console.log(prev,next)
        return prev+10*/
        return prev + next.price * next.num
      }, 0)
      // return state.cartData.reduce((prev, next) => prev + next.price * next.num, 0)
    }
  },
  mutations: {
    setCartData(state, data) {
      state.cartData = data
    },
    incr(state, index) {
      state.cartData[index].num++
    },
    decr(state, index) {
      state.cartData[index].num--
    },
    add(state,title){
      state.todo.push(title)
    },
    ok(state,index){
      // 先获取数据
      let title = state.todo[index]
      // 把未完成删除
      state.todo.splice(index,1)
      // 已完成的添加
      state.todook.push(title)
    }
  },
  actions: {
    cartData({commit}, data) {
      // 让mutations更新state数据
      commit('setCartData', data)
    },
    incr({commit}, index) {
      commit('incr', index)
    },
    decr({commit}, index) {
      commit('decr', index)
    },
    add({commit},title){
      commit('add',title)
    },
    ok({commit},index){
      commit('ok',index)
    }
  },
  modules: {}
})
